/*
 *
 * Modified BSD license.
 *
 * Copyright (c) 2012-2013 Sung-Taek, Kim <stkim1@colorfulglue.com> All Rights
 * Reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 * Redistributions of  source code  must retain  the above  copyright notice,
 * this list of  conditions and the following  disclaimer. Redistributions in
 * binary  form must  reproduce  the  above copyright  notice,  this list  of
 * conditions and the following disclaimer  in the documentation and/or other
 * materials  provided with  the distribution.  Neither the  name of Sung-Tae
 * k Kim nor the names of its contributors may be used to endorse or promote
 * products  derived  from  this  software  without  specific  prior  written
 * permission.  THIS  SOFTWARE  IS  PROVIDED BY  THE  COPYRIGHT  HOLDERS  AND
 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
 * NOT LIMITED TO, THE IMPLIED  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A  PARTICULAR PURPOSE  ARE DISCLAIMED.  IN  NO EVENT  SHALL THE  COPYRIGHT
 * HOLDER OR  CONTRIBUTORS BE  LIABLE FOR  ANY DIRECT,  INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY,  OR CONSEQUENTIAL DAMAGES (INCLUDING,  BUT NOT LIMITED
 * TO, PROCUREMENT  OF SUBSTITUTE GOODS  OR SERVICES;  LOSS OF USE,  DATA, OR
 * PROFITS; OR  BUSINESS INTERRUPTION)  HOWEVER CAUSED AND  ON ANY  THEORY OF
 * LIABILITY,  WHETHER  IN CONTRACT,  STRICT  LIABILITY,  OR TORT  (INCLUDING
 * NEGLIGENCE  OR OTHERWISE)  ARISING  IN ANY  WAY  OUT OF  THE  USE OF  THIS
 * SOFTWARE,   EVEN  IF   ADVISED  OF   THE  POSSIBILITY   OF  SUCH   DAMAGE.
 *
 */

#import "BaseViewController.h"

@implementation BaseViewController{
	BOOL		_isSystemVersionSixth;
}
@synthesize isSystemVersionSixth = _isSystemVersionSixth;
-(id)init
{
	self = [super init];
	
	if(self)
	{
		[self completeInstanceCreation];
	}
	
	return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
	self = [super initWithCoder:aDecoder];
	if (self)
	{
		[self completeInstanceCreation];
	}
	return self;
}

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
	self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
	if(self)
	{
		[self completeInstanceCreation];
	}

	return self;
}

//------------------------------------------------------------------------------
#pragma mark view lifecycle method
//------------------------------------------------------------------------------
-(void)loadView
{
	[super loadView];
	[self finishViewConstruction];
}

-(void)viewDidUnload
{
	[self startViewDestruction];
	[super viewDidUnload];
}

-(void)didReceiveMemoryWarning
{
	[super didReceiveMemoryWarning];
    BOOL shouldDislodge = !(self.isViewLoaded && self.view.window);
    if([self isSystemVersionSixth] && shouldDislodge)
    {
        [self dislodgeViewForMemWarning];
    }
}

-(void)dealloc
{
	[self startViewDestruction];
	[self beginInstanceDestruction];
	[super dealloc];
}

//------------------------------------------------------------------------------
#pragma mark - Instance constructon done
//------------------------------------------------------------------------------
-(void)completeInstanceCreation
{
	_isSystemVersionSixth =\
		([[[UIDevice currentDevice]
		   systemVersion]
		  compare:@"6.0"
		  options:NSNumericSearch]
		 != NSOrderedAscending);

}

- (void)beginInstanceDestruction
{
}

//------------------------------------------------------------------------------
#pragma mark - child class view contruction
//------------------------------------------------------------------------------
-(void)finishViewConstruction
{
}

//------------------------------------------------------------------------------
#pragma mark child class view destruction
//------------------------------------------------------------------------------
- (void)startViewDestruction
{
}

// special view distructor for iOS 6
- (void)dislodgeViewForMemWarning
{

    [self startViewDestruction];
    self.view = nil;
}

@end
